home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 May / PCpro_2006_05.ISO / files / mobile / fma-2.0-stable-setup.exe / {app} / source / uGlobal.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2004-09-10  |  6.6 KB  |  271 lines

  1. unit uGlobal;
  2.  
  3. {
  4. *******************************************************************************
  5. * Descriptions: Global
  6. * $Source: /cvsroot/fma/fma/uGlobal.pas,v $
  7. * $Locker:  $
  8. *
  9. * Todo:
  10. *
  11. * Change Log:
  12. * $Log: uGlobal.pas,v $
  13. * Revision 1.11.6.1  2004/09/10 12:14:15  z_stoichev
  14. * - Handle GetFirstToken with empty str.
  15. *
  16. * Revision 1.12  2004/09/10 11:49:05  z_stoichev
  17. * handle GetTocken from empty string
  18. *
  19. * Revision 1.11  2004/07/02 08:14:01  z_stoichev
  20. * - Added Sound events for Proximity Away/Near.
  21. *
  22. * Revision 1.10  2004/06/22 14:33:52  z_stoichev
  23. * - Added GetToken double-quotes support.
  24. *
  25. * Revision 1.9  2004/06/15 13:02:59  z_stoichev
  26. * Fixed registry entries.
  27. *
  28. * Revision 1.8  2004/06/14 09:33:48  z_stoichev
  29. * Fixed '' not integer value.
  30. *
  31. * Revision 1.7  2004/05/19 18:34:15  z_stoichev
  32. * Build 0.1.0.35c
  33. *
  34. * Revision 1.6  2003/12/04 16:30:43  z_stoichev
  35. * Fixed memory leak,
  36. * Added new function GetTokenCount.
  37. *
  38. * Revision 1.5  2003/11/28 09:38:07  z_stoichev
  39. * Merged with branch-release-1-1 (Fma 0.10.28c)
  40. *
  41. * Revision 1.4.2.2  2003/11/27 12:56:10  z_stoichev
  42. * Add sent message sound.
  43. *
  44. * Revision 1.4.2.1  2003/10/27 07:22:54  z_stoichev
  45. * Build 0.1.0 RC1 Initial Checkin.
  46. *
  47. * Revision 1.4  2003/07/02 12:40:30  crino77
  48. * added call sound
  49. *
  50. * Revision 1.3  2003/01/30 04:15:57  warren00
  51. * Updated with header comments
  52. *
  53. *
  54. *******************************************************************************
  55. }
  56.  
  57. interface
  58.  
  59. function WideQuoteStr(str: WideString): WideString;
  60.  
  61. function GetFirstToken(var str: WideString; delimiter: char = ','): WideString;
  62.  
  63. { Returns now many tokens are in the string, 1..n, if str is empty returns 0 }
  64. function GetTokenCount(str: String): Integer;
  65. { Extracts token number 0..n-1 from str, where n is taken from GetTokenCount }
  66. function GetToken(str: String; index: Integer): String;
  67.  
  68. procedure InitRegistry;
  69.  
  70. implementation
  71.  
  72. uses Classes, Registry, SysUtils;
  73.  
  74. function WideQuoteStr(str: WideString): WideString;
  75. var
  76.   Quote: boolean;
  77.   i: integer;
  78. begin
  79.   Quote := False;
  80.   str := StringReplace(str, '"', '""', [rfReplaceAll]);
  81.   for i := 1 to Length(str) do
  82.     if (str[i] = ' ') or (str[i] = '"') then begin
  83.       Quote := True;
  84.       break;
  85.     end;
  86.   if Quote then
  87.     str := '"' + str + '"';
  88.   Result := str;
  89. end;
  90.  
  91. function GetFirstToken(var str: WideString; delimiter: char = ','): WideString;
  92. var
  93.   i,j,k,q: integer;
  94.   s,d: WideString;
  95. begin
  96.   { Left trim text }
  97.   j := Length(str);
  98.   if j = 0 then begin
  99.     Result := '';
  100.     exit;
  101.   end;
  102.   i := 1;
  103.   while (i < j) and (str[i] = ' ') do inc(i);
  104.   { Extract first token }
  105.   if str[i] = '"' then begin
  106.     { token IS quoted }
  107.     s := Copy(str,i+1,j);
  108.     k := Length(s);
  109.     j := 1; d := ''; q := 0;
  110.     while (j <= k) do begin
  111.       if s[j] = '"' then begin
  112.         inc(q);
  113.         { check for double-quotes }
  114.         if q = 2 then begin
  115.           q := 0;
  116.           inc(j);
  117.           continue; // ignore second quote
  118.         end;
  119.       end
  120.       else
  121.         if q = 1 then
  122.           break // single quote found, so exit loop
  123.         else
  124.           q := 0;
  125.       d := d + s[j];
  126.       inc(j);
  127.     end;
  128.     if q = 1 then begin // remove last single quote
  129.       dec(j);
  130.       Delete(d,Length(d),1);
  131.     end;
  132.     if j <= k then
  133.       s := d
  134.     else
  135.       Abort; // not possible if text is correctly quoted!
  136.     Delete(str,1,i+j);
  137.     { Clear text up to next delimiter }
  138.     i := Pos(delimiter,str);
  139.     if i = 0 then i := Length(str);
  140.     Delete(str,1,i);
  141.   end
  142.   else begin
  143.     { token is NOT quoted }
  144.     s := Copy(str,i,j);
  145.     j := Pos(delimiter,s);
  146.     if j = 0 then j := Length(s)+1;
  147.     s := Trim(Copy(s,1,j-1));
  148.     { Update source }
  149.     Delete(str,1,i+j-1);
  150.   end;
  151.   Result := s;
  152. end;
  153.  
  154. function GetToken(str: String; index: Integer): String;
  155. var
  156.   //sl: TStrings;
  157.   s,d: WideString;
  158. begin
  159.   Result := '';
  160.   {
  161.   try
  162.     sl := TStringList.Create;
  163.     try
  164.       sl.DelimitedText := str;
  165.       Result := sl.Strings[index];
  166.     finally
  167.       sl.Free;
  168.     end;
  169.   except
  170.   end;
  171.   }
  172.   s := str;
  173.   while Trim(s) <> '' do begin
  174.     d := GetFirstToken(s);
  175.     if index = 0 then begin
  176.       Result := d;
  177.       break;
  178.     end;
  179.     Dec(index);
  180.   end;
  181. end;
  182.  
  183. function GetTokenCount(str: String): Integer;
  184. var
  185.   //sl: TStrings;
  186.   s: WideString;
  187. begin
  188.   Result := 0;
  189.   {
  190.   try
  191.     sl := TStringList.Create;
  192.     try
  193.       sl.DelimitedText := str;
  194.       Result := sl.Count;
  195.     finally
  196.       sl.Free;
  197.     end;
  198.   except
  199.   end;
  200.   }
  201.   s := str;
  202.   while Trim(s) <> '' do begin
  203.     Inc(Result);
  204.     GetFirstToken(s);
  205.   end;
  206. end;
  207.  
  208. procedure InitRegistry;
  209. var
  210.   reg: TRegistry;
  211. begin
  212.   reg := TRegistry.Create;
  213.   try
  214.     reg.OpenKey('\AppEvents\EventLabels\FMA_SMSReceived', True);
  215.     reg.WriteString('', 'SMS Received');
  216.     reg.CloseKey;
  217.  
  218.     reg.OpenKey('\AppEvents\EventLabels\FMA_SMSSent', True);
  219.     reg.WriteString('', 'SMS Sent');
  220.     reg.CloseKey;
  221.  
  222.     reg.OpenKey('\AppEvents\EventLabels\FMA_Calling', True);
  223.     reg.WriteString('', 'Calling Contact');
  224.     reg.CloseKey;
  225.  
  226.     reg.OpenKey('\AppEvents\EventLabels\FMA_CallReceived', True);
  227.     reg.WriteString('', 'Call Received');
  228.     reg.CloseKey;
  229.  
  230.     reg.OpenKey('\AppEvents\EventLabels\FMA_MEConnected', True);
  231.     reg.WriteString('', 'Connected to Mobile Equipment');
  232.     reg.CloseKey;
  233.  
  234.     reg.OpenKey('\AppEvents\EventLabels\FMA_MEDisconnected', True);
  235.     reg.WriteString('', 'Disconnected from Mobile Equipment');
  236.     reg.CloseKey;
  237.  
  238.     reg.OpenKey('\AppEvents\EventLabels\FMA_Away', True);
  239.     reg.WriteString('', 'Proximity Away');
  240.     reg.CloseKey;
  241.  
  242.     reg.OpenKey('\AppEvents\EventLabels\FMA_Near', True);
  243.     reg.WriteString('', 'Proximity Near');
  244.     reg.CloseKey;
  245.  
  246.     reg.OpenKey('\AppEvents\Schemes\Apps\MobileAgent', True);
  247.     reg.WriteString('', 'floAt''s Mobile Agent');
  248.     reg.CloseKey;
  249.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Calling');
  250.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_CallReceived');
  251.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_SMSReceived');
  252.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_SMSSent');
  253.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Away');
  254.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Near');
  255.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_MEConnected');
  256.     reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_MEDisconnected');
  257.   finally
  258.     reg.Free;
  259.   end;
  260. end;
  261.  
  262. {
  263. var
  264.   w: WideString;
  265.  
  266. initialization
  267.   w := '"a=""b"""';  // a="b" 
  268.   GetFirstToken(w);
  269. }
  270. end.
  271.